ডিপেনডেন্সি ইনজেকশন (Dependency Injection) হলো একটি ডিজাইন প্যাটার্ন, যা ক্লাসের মধ্যে নির্দিষ্ট ডিপেনডেন্সি বা নির্ভরশীলতা সরাসরি তৈরি না করে বাইরের উৎস থেকে সরবরাহ করা হয়। এর ফলে কোডের মডুলারিটি ও টেস্টেবিলিটি বৃদ্ধি পায় এবং লুজ কাপলিং নিশ্চিত হয়। ডিপেনডেন্সি ইনজেকশন সি# সহ বিভিন্ন আধুনিক প্রোগ্রামিং ভাষায় জনপ্রিয় একটি প্যাটার্ন।
ডিপেনডেন্সি ইনজেকশন তিন ধরনের হতে পারে:
কনস্ট্রাক্টর ইনজেকশনে ডিপেনডেন্সি কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা হয়। এটি সবচেয়ে সাধারণ এবং প্রচলিত পদ্ধতি।
csharp
Copy code
public interface ILogger
{
void Log(string message);
}
public class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine("Log: " + message);
}
}
public class OrderService
{
private readonly ILogger _logger;
public OrderService(ILogger logger)
{
_logger = logger;
}
public void ProcessOrder()
{
_logger.Log("Order processed successfully.");
}
}
ILogger logger = new ConsoleLogger();
OrderService orderService = new OrderService(logger);
orderService.ProcessOrder();
এখানে OrderService
ক্লাসটি ILogger
ইন্টারফেসের উপর নির্ভরশীল, কিন্তু এটি সরাসরি ConsoleLogger
তৈরি করে না, বরং বাইরের উৎস থেকে এটি ইনজেক্ট করা হয়। এতে লুজ কাপলিং এবং টেস্টেবিলিটি বৃদ্ধি পায়।
প্রোপার্টি ইনজেকশন ব্যবহারে ডিপেনডেন্সি ক্লাসের প্রোপার্টি হিসেবে সেট করা হয়।
public class OrderService
{
public ILogger Logger { get; set; }
public void ProcessOrder()
{
Logger?.Log("Order processed successfully.");
}
}
OrderService orderService = new OrderService();
orderService.Logger = new ConsoleLogger();
orderService.ProcessOrder();
এখানে ILogger
প্রোপার্টি হিসেবে ইনজেক্ট করা হয়েছে। এটি ঐচ্ছিক ডিপেনডেন্সির জন্য উপযুক্ত।
মেথড ইনজেকশনে নির্দিষ্ট মেথডের প্যারামিটার হিসেবে ডিপেনডেন্সি ইনজেক্ট করা হয়।
public class OrderService
{
public void ProcessOrder(ILogger logger)
{
logger.Log("Order processed successfully.");
}
}
OrderService orderService = new OrderService();
orderService.ProcessOrder(new ConsoleLogger());
এখানে ProcessOrder
মেথডে ILogger
প্যারামিটার হিসেবে ইনজেক্ট করা হয়েছে। এই পদ্ধতি সাধারণত অস্থায়ী বা নির্দিষ্ট মেথডের জন্য প্রয়োজনীয় ডিপেনডেন্সি ব্যবহারে কার্যকর।
ASP.NET Core-এ ডিপেনডেন্সি ইনজেকশন বিল্ট-ইন সমর্থন করে। সার্ভিসগুলো Startup
ক্লাসের ConfigureServices
মেথডে রেজিস্টার করা হয়।
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<ILogger, ConsoleLogger>();
services.AddScoped<OrderService>();
}
public class OrderController : Controller
{
private readonly OrderService _orderService;
public OrderController(OrderService orderService)
{
_orderService = orderService;
}
public IActionResult Index()
{
_orderService.ProcessOrder();
return View();
}
}
এখানে OrderService
ডিপেনডেন্সি OrderController
এ ইনজেক্ট করা হয়েছে, যা Startup
ক্লাসে রেজিস্টার করা আছে।
পদ্ধতি | ব্যবহার |
---|---|
কনস্ট্রাক্টর ইনজেকশন | কনস্ট্রাক্টরের মাধ্যমে ডিপেনডেন্সি ইনজেক্ট করা |
প্রোপার্টি ইনজেকশন | প্রোপার্টির মাধ্যমে ডিপেনডেন্সি ইনজেক্ট করা |
মেথড ইনজেকশন | মেথডের প্যারামিটার হিসেবে ডিপেনডেন্সি ইনজেক্ট করা |
AddScoped | ASP.NET Core এ প্রতিটি রিকোয়েস্টে নতুন ইনস্ট্যান্স প্রদান করা |
AddSingleton | অ্যাপ্লিকেশন চলাকালীন একটি মাত্র ইনস্ট্যান্স প্রদান করা |
AddTransient | প্রতিবার সার্ভিস কলের সময় নতুন ইনস্ট্যান্স প্রদান করা |
ডিপেনডেন্সি ইনজেকশন কোডকে আরও মডুলার এবং টেস্টেবল করে এবং ASP.NET Core এর মতো ফ্রেমওয়ার্কে বিল্ট-ইন সমর্থনের মাধ্যমে এটি অত্যন্ত কার্যকর।
আরও দেখুন...